package weatherdata;

import Entidad.Report;
import Entidad.Sesion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class WeatherData implements Subject {
	private ArrayList<Observer> observers;
	private float temperature;
	private float humidity;
	private float pressure;
        private int tiempo;
        private Sesion sesion = Sesion.getInstancia();
        
	public WeatherData() {
		observers = new ArrayList<Observer>();
	}

	public void registerObserver(Observer o) {
		observers.add(o);
	}

	public void removeObserver(Observer o) {
		int i = observers.indexOf(o);
		if (i >= 0) {
			observers.remove(i);
		}
	}

	public void notifyObservers() {
		for (Object obs : observers) {
			Observer observer = (Observer) obs;
			observer.update(temperature, humidity, pressure);
		}
	}

	public void measurementsChanged() {
		notifyObservers();
	}
        
        
        /*
         *¨Para la temperatura el desierto de Lut la máxima temperatura alcanzada 
         * hasta ahora en la faz de la Tierra 71 °C
         * 
         * Para la presión Presión máxima 1030,57
        */ 
	public void setMeasurements(float temp, float hum, float pres, int tiempo) {
            this.temperature = temp;
            this.humidity = hum;
            this.pressure = pres;
            
            //se genera el retardo no superior a 59 segundos
            try {
                //tiempo se multiplica por mil dado que sleep recibe como parametro un valor
                //entero el cual representa el timepo en milisegundos
                Thread.sleep(tiempo*1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(WeatherData.class.getName()).log(Level.SEVERE, null, ex);
            }
                
            //crear y salvar datos generados
            sesion.getListaReportes().add(new Report(temp, hum, pres));
                
            this.tiempo = tiempo;
            measurementsChanged();
	}
        
        
}
